package com.yujiahao.bigdata.rdd.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * todo 算子
 * 所谓算子其实就是RDD的方法
 * 转换算子其实就是将旧的RDD转换为新的RDD的方法
 */

object Spark_RDD_Pper_Transform_ReduceByKey {
  def main(args: Array[String]): Unit = {


  //TODO 1、获得连接
  val conf: SparkConf = new SparkConf().setAppName("WordCount").setMaster("local")
  val sc: SparkContext = new SparkContext(conf)


    val rdd= sc.makeRDD(List(("a",1),"a" -> 2,("a" -> 3),"a" -> 4),2)

    //TODO ReduceByKey算子：将相同的key的数据V聚合在一起实现统计操作
    //可以将分组和聚合功能合二为一，所以可以实现Word Count（2 /10)
    //这个会在shuffle之前进行预聚合（Combine）性能会好很多比groupByKey
    //先计算分区内，在计算分区间，这里面区内外计算逻辑相同
    val value: RDD[(String, Int)] = rdd.reduceByKey(_ + _)
    value.collect().foreach(println)
  //TODO 2、关闭连接
  sc.stop()
  }
}